package com.zjsru.plan2023.oneday;

import java.util.ArrayList;
import java.util.List;

/**
 * @Author: CookLee
 * @Date: 2023/8/16
 * 找出转圈游戏输家
 * 在整场游戏中没有接到过球的朋友是 输家 。
 * 给你参与游戏的朋友数量 n 和一个整数 k ，请按升序排列返回包含所有输家编号的数组 answer 作为答案。
 * \
 * 输入：n = 5, k = 2
 * 输出：[4,5]
 * 解释：以下为游戏进行情况：
 * 1）第 1 个朋友接球，第 1 个朋友将球传给距离他顺时针方向 2 步的玩家 —— 第 3 个朋友。
 * 2）第 3 个朋友将球传给距离他顺时针方向 4 步的玩家 —— 第 2 个朋友。
 * 3）第 2 个朋友将球传给距离他顺时针方向 6 步的玩家 —— 第 3 个朋友。
 * 4）第 3 个朋友接到两次球，游戏结束。
 * \
 * 输入：n = 4, k = 4
 * 输出：[2,3,4]
 * 解释：以下为游戏进行情况：
 * 1）第 1 个朋友接球，第 1 个朋友将球传给距离他顺时针方向 4 步的玩家 —— 第 1 个朋友。
 * 2）第 1 个朋友接到两次球，游戏结束。
 *
 */
public class CircularGameLosers {
    
    public int[] circularGameLosers(int n, int k) {
        //判断走过那些位置
        boolean[] position = new boolean[n];
        //为true则为走到了重复的地方
        for (int i = k, j = 0; !position[j]; i += k) {
            position[j] = true;
            j = (j + i) % n;
        }
        //获取没走过的位置数
        List<Integer> list = new ArrayList<>();
        for (int i = 0; i < n; i++) {
            if (!position[i]) {
                list.add(i + 1);
            }
        }
        //转化为对应的格式
        return list.stream().mapToInt(Integer::intValue).toArray();
    }
    
    
    public static void main(String[] args) {
        CircularGameLosers circularGameLosers = new CircularGameLosers();
        int n = 4;
        int k = 4;
        System.out.println(circularGameLosers.circularGameLosers(n, k));
    }
}
